package com.zhy.learning.demo.kill;


/**
 * @author zhy
 * @date 2020/3/21 3:56 下午
 * @description 当我们使用kill PID的方式结束一个Java应用的时候，JVM会收到一个停止信号，然后执行shutdownHook的线程。
 * 一个实现示例如下：ShutdownHook
 * 其中关键语句Runtime.getRuntime().addShutdownHook(this);，注册一个JVM关闭的钩子，这个钩子可以在以下几种场景被调用：
 *
 * 程序正常退出
 * 使用System.exit()
 * 终端使用Ctrl+C触发的中断
 * 系统关闭
 * 使用Kill pid命令干掉进程
 *
 * 作者：rabbitGYK
 * 链接：https://www.jianshu.com/p/0c49eb23c627
 * 来源：简书
 */
public class TestMain {
    private ShutdownHook shutdownHook;
    public static void main( String[] args ) {
        TestMain app = new TestMain();
        System.out.println( "Hello World!" );
        app.execute();
        System.out.println( "End of main()" );
    }
    public TestMain(){
        this.shutdownHook = new ShutdownHook(Thread.currentThread());
    }
    public void execute(){
        while(!shutdownHook.shouldShutDown()){
            System.out.println("I am sleep");
            try {
                Thread.sleep(1*1000);
            } catch (InterruptedException e) {
                System.out.println("execute() interrupted");
            }
            System.out.println("I am not sleep");
        }
        System.out.println("end of execute()");
    }
}
